///**
// * Hailiang.com Inc.
// * Copyright (c) 2004-2023 All Rights Reserved.
// */
//package com.easyexcel.demo.core;
//
//import cn.hutool.core.lang.Assert;
//import com.alibaba.excel.util.DateUtils;
//import lombok.AllArgsConstructor;
//import lombok.NoArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.poi.ss.usermodel.*;
//import org.apache.poi.xssf.usermodel.XSSFCell;
//import org.apache.poi.xssf.usermodel.XSSFRow;
//import org.apache.poi.xssf.usermodel.XSSFSheet;
//import org.apache.poi.xssf.usermodel.XSSFWorkbook;
//
//import java.util.*;
//
///**
// * Excel导入错误-单元格渲染器
// *
// * @author ShuaiYu Tao
// * @version : ExcelErrorRender.java, v 0.1 2023年10月18日 10:57  ShuaiYu Tao Exp $
// */
//@AllArgsConstructor
//@NoArgsConstructor
//@Slf4j
//public class ExcelErrorRenderer {
//
//    /**
//     * excel文件工作簿
//     */
//    private XSSFWorkbook                   workbook;
//    /**
//     * 开始读数据的row
//     */
//    private Integer                        beginStartRow;
//    /**
//     * Pair<Row,Col>的映射
//     */
//    //private List<Tuple2<Integer, Integer>> errorRowColPair;
//
//    private Integer                        lastIndex = 100;
//
//    public static ExcelErrorRenderer of(XSSFWorkbook workbook, Integer beginStartRow,
//                                        List<Tuple2<Integer, Integer>> errorRowColPair) {
//        Assert.isNull(workbook, "workbook cannot be null");
//        Assert.isNull(errorRowColPair, "errorRowColPair cannot be empty");
//        return new ExcelErrorRenderer(workbook, beginStartRow, errorRowColPair, 100);
//    }
//
//    public static ExcelErrorRenderer of(XSSFWorkbook workbook, Integer beginStartRow,
//                                        List<Tuple2<Integer, Integer>> errorRowColPair, Integer maxCellNumber) {
//        Assert.isNull(workbook, "workbook cannot be null");
//        Assert.isNull(errorRowColPair, "errorRowColPair cannot be empty");
//        return new ExcelErrorRenderer(workbook, beginStartRow, errorRowColPair, maxCellNumber);
//    }
//
//    private Map<Integer, Set<Integer>> convert2Map() {
//        Map<Integer, Set<Integer>> rowCol = new HashMap<>();
//        errorRowColPair.forEach(pair -> {
//            Set<Integer> cols = rowCol.getOrDefault(pair._1, new HashSet<>());
//            cols.add(pair._2);
//            rowCol.put(pair._1, cols);
//        });
//        return rowCol;
//    }
//
//    public void highlightRowAndCell(Integer sheetIndex) {
//        XSSFSheet sheet = workbook.getSheetAt(sheetIndex);
//
//        // 遍历每行，逐行去除样式
//        for (int rowNum = beginStartRow; rowNum <= sheet.getLastRowNum(); rowNum++) {
//            XSSFRow row = sheet.getRow(rowNum);
//            if (row != null) {
//                for (int cellNum = 0; cellNum < row.getLastCellNum(); cellNum++) {
//                    XSSFCell cell = row.getCell(cellNum);
//                    if (cell != null
//                        && !(cell.getCellType() == CellType.NUMERIC && DateUtil.isCellDateFormatted(cell))) {
//                        // 去除单元格样式
//                        cell.setCellStyle(null);
//                    }
//                }
//            }
//        }
//
//        Map<Integer, Set<Integer>> rowCol = convert2Map();
//        Font font = workbook.createFont();
//        // 创建一个单元格样式并将文字颜色设置为红色
//        font.setColor(IndexedColors.RED.getIndex());
//        font.setFontName("宋体"); // 设置字体为宋体
//        CellStyle redFont = workbook.createCellStyle();
//        redFont.setFont(font);
//        // 将背景色标黄
//        CellStyle yellowBg = workbook.createCellStyle();
//        yellowBg.setFont(font);
//        yellowBg.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
//        yellowBg.setFillPattern(FillPatternType.SOLID_FOREGROUND);
//        rowCol.forEach((rowNum, colSet) -> {
//            // 获取错误行
//            XSSFRow row = sheet.getRow(rowNum - 1);
//            if (null == row) {
//                return;
//            }
//            //循环报错行的每一列进行标红+标黄处理
//            for (int cellIndex = 0; cellIndex < lastIndex + 1; cellIndex++) {
//
//                XSSFCell cell = row.getCell(cellIndex, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
//                if (cell != null) {
//                    if (cell.getCellType() == CellType.NUMERIC && DateUtil.isCellDateFormatted(cell)) {
//                        Date dateCellValue = cell.getDateCellValue();
//                        cell.setCellValue(DateUtils.format(dateCellValue, "yyyy/MM/dd"));
//                        cell.setCellType(CellType.STRING);
//                    }
//                    if (colSet.contains(cellIndex)) {
//                        cell.setCellStyle(yellowBg);
//                    } else {
//                        cell.setCellStyle(redFont);
//                    }
//                }
//            }
//        });
//    }
//
//    public void highlightRowAndCellIndex(Integer sheetIndex, Integer startCellIndex) {
//        XSSFSheet sheet = workbook.getSheetAt(sheetIndex);
//        Map<Integer, Set<Integer>> rowCol = convert2Map();
//        Font font = workbook.createFont();
//        // 创建一个单元格样式并将文字颜色设置为红色
//        font.setColor(IndexedColors.RED.getIndex());
//        font.setFontName("宋体"); // 设置字体为宋体
//        CellStyle redFont = workbook.getCellStyleAt(5);
//        redFont.setFont(font);
//        // 将背景色标黄
//        CellStyle yellowBg = workbook.getCellStyleAt(6);
//        yellowBg.setFont(font);
//        yellowBg.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
//        // 获取错误行
//        XSSFRow row = sheet.getRow(1);
//        if (null == row) {
//            return;
//        }
//        // 设置其他单元格样式
//        for (int cellIndex = 5; cellIndex <= 6; cellIndex++) {
//            XSSFCell cell = row.getCell(cellIndex, Row.MissingCellPolicy.RETURN_BLANK_AS_NULL);
//            if (cell != null) {
//                if (cellIndex == 5) {
//                    cell.setCellStyle(yellowBg);
//                } else if (cellIndex == 6) {
//                    cell.setCellStyle(yellowBg);
//                }
//            }
//
//        }
//
//        setRedCell(sheet, redFont);
//    }
//
//    private void setRedCell(XSSFSheet sheet, CellStyle redFont) {
//
//        for (int rowNum = 2; rowNum <= 20; rowNum++){
//            XSSFRow row = sheet.getRow(rowNum);
//            //循环报错行的每一列进行标红+标黄处理
//            for (int cellIndex = 0; cellIndex < lastIndex + 1; cellIndex++) {
//                XSSFCell cell = row.getCell(cellIndex, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
//                if (cell != null) {
//                    cell.setCellStyle(redFont);
//                }
//            }
//        }
//
//
//    }
//
//}